/**
 * Tencent is pleased to support the open source community by making Polaris available.
 *
 * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
 *
 * Licensed under the BSD 3-Clause License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * https://opensource.org/licenses/BSD-3-Clause
 *
 * Unless required by applicable law or agreed to in writing, software distributed
 * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */

package metrics

import "fmt"

type InstanceMetricKey struct {
	ClusterName string
	Host        string
	Port        uint32
}

func (i InstanceMetricKey) String() string {
	return fmt.Sprintf("ClusterName %s, Host %s, Port %d", i.ClusterName, i.Host, i.Port)
}

type InstanceMetricValue struct {
	RqSuccess uint64
	RqError   uint64
	RqTotal   uint64
}

func (i InstanceMetricValue) String() string {
	return fmt.Sprintf("RqSuccess %d, RqError %d, RqTotal %d", i.RqSuccess, i.RqError, i.RqTotal)
}

type StatsObject struct {
	Stats []*Stat `json:"stats"`
}

type Stat struct {
	Name       string      `json:"name"`
	Value      interface{} `json:"value"`
	Histograms *Histograms `json:"histograms"`
}

type Histograms struct {
	ComputedQuantiles  []*ComputedQuantiles `json:"computed_quantiles"`
	SupportedQuantiles []float64            `json:"supported_quantiles"`
}

type CumulativeObject struct {
	Cumulative interface{} `json:"cumulative"`
	Interval   interface{} `json:"interval"`
}

type ComputedQuantiles struct {
	Name   string              `json:"name"`
	Values []*CumulativeObject `json:"values"`
}
